<?php
/**
 * “联系我们”页面的回调函数
 */
function contactus_create(){
	  //我们为这个页面设置标题
	 drupal_set_title('联系我们');
	 
	 $render_array = array(
	   '#markup' => '', 
	 );
	 
	 //该页面的正文为一个表单，注意对于表单，这里需要使用drupal_render呈现一下。
	 $form = drupal_get_form('contactus_form');
	 $render_array['#markup'] .= drupal_render($form);
	 
	 //Drupal7的页面回调，返回的应该是一个数组
	 return $render_array;
}
/**
 * “确认”页面的回调函数
 */
function contactus_confirm_page(){
  //我们为这个页面设置标题
	 drupal_set_title('联系我们');
	 
	 //这里首先作了判断，如果会话中没有设置contactus_form，返回contactus
	 if(empty($_SESSION['contactus_form'])){
	  drupal_goto('contactus/contactus');
	 }else{
	 }
	
	 $render_array = array(
	   '#markup' => '', 
	 );
	 //该页面的正文为一个表单，注意对于表单，这里需要使用drupal_render呈现一下。
	 $form = drupal_get_form('contactus_confirm_form');
	 $render_array['#markup'] .= drupal_render($form);
	 //Drupal7的页面回调，返回的应该是一个数组
	 return $render_array;
}

/**
 * “致谢”页面的回调函数
 */
function contactus_thanks_page(){
  //我们为这个页面设置标题
	 drupal_set_title('联系我们');
	 $render_array = array(
	   '#markup' => '', 
	 );
	 //Drupal7的页面回调，返回的应该是一个数组
	 $render_array['#markup'] .= '<div id="contactus-thanks">';
	 $render_array['#markup'] .= t('感谢您的反馈，我们会在第一时间给您回复。');
	 $render_array['#markup'] .= '</div>';
	 
	 return $render_array;
}
 /*
 * 实现钩子hook_mail().
 */
function contactus_mail($key, &$message, $params){
 $language = $message['language'];
  switch ($key) {
   case 'contact':
  
    //邮件的标题
    $message['subject'] = '联系我们';
   
   //邮件正文,这里面包含:联系人、单位名称、电子邮件、电话号码、邮件正文、访问来源
      $message['body'][] = '联系人:'.$params['name'];
      $message['body'][] = '单位名称:'.$params['company_name'];
      $message['body'][] = '电子邮件:'.$params['mail'];
      $message['body'][] = '电话号码:'.$params['phone'];
      $message['body'][] = '反馈意见内容:'.$params['contact'];
  }
}


function contactus_list_page() {
  $header = array(
      array('data' => '联系人', 'field' => 'name',),
      array('data' => '单位名称', 'field' => 'companyname'),
      array('data' => '反馈时间', 'field' => 'timestamp', 'sort' => 'desc'),
      );
  $query = db_select('contactus', 'n')
      ->extend('PagerDefault') //Pager Extender
      ->limit(10)//10 results per page
      ->extend('TableSort')//Sorting Extender
      ->orderByHeader($header)//Field to sort on is picked from $header
      ->fields ('n', array (
	      'id',
	      'name',
	      'companyname',
	      'timestamp',
      	));

  $results = $query
      ->execute();

  $rows = array();
  foreach ($results as $node) {
      $rows[] = array(
	      'data' => array(
	        l($node->name, 'contactus/list/'. $node->id),
	        $node->companyname,
	        format_date($node->timestamp),
	      )
      );
  }
  $html = theme('table', 
      array(
            'header' => $header,
            'rows'=>$rows,
            //'caption' => '反馈意见列表',//Optional Caption for the table
            'sticky' => TRUE,//Optional to indicate whether the table headers should be sticky
            'empty' => '没有反馈意见',//Optional empty text for the table if resultset is empty
      )
      );
  $html .= theme('pager',
      array(
            'tags' => array()
      )
      );
  return ($html); 
}


function contactus_per_page($perid) {
 
  // content variable that will be returned for display
  $page_content = '';
  $page_content .= l('查看反馈意见列表','contactus/list') . '<br />'. '<br />';
  $query = "SELECT name,companyname,phone,timestamp,mail,body FROM " .
           "{contactus} where id = ?";
  $queryResult = db_query($query, array($perid));
  foreach ($queryResult as $links ) {
  	$datetime = format_date($links->timestamp);
    $page_content .= '<h5>联系人：'.$links->name.'</h5><br />';
    $page_content .= '<h5>反馈时间：'.$datetime.'</h5><br />';
	$page_content .= '<h5>公司名称：'.$links->companyname.'</h5><br />';
    $page_content .= '<h5>邮箱地址：'.$links->mail.'</h5><br />';
	$page_content .= '<h5>电话：'.$links->phone.'</h5><br />';
    $page_content .= '反馈内容：'.$links->body;
	$page_content = str_replace(array("\n", "\r\n") , "<BR />", $page_content);
  }
  // More coming....
  if ($page_content == '') {
    $page_content = "没有该反馈意见.";
  }
  
  drupal_set_title('管理反馈意见');
	 
  $render_array = array(
	   '#markup' => $page_content,
	 );
	 
	 //该页面的正文为一个表单，注意对于表单，这里需要使用drupal_render呈现一下。
  $form = drupal_get_form('contactus_edit_form',$perid);
  $render_array['#markup'] .= drupal_render($form);
	 
	 //Drupal7的页面回调，返回的应该是一个数组
  return $render_array;
}


 /**
 * “确认”表单的构建函数
 */
function contactus_confirm_form(){

 //drupal_set_message(print_r($_SESSION['contactus_form']));
 //表单元素“联系人”
 $form['name'] = array(
  '#title' => t('联系人'),
  //表单元素的类型,这里为item
  '#type' => 'item',
  //'#default_value' => $_SESSION['contactus_form']['name'],
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,
  //最后改为#markup,才可以了
  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
 );
 
  //表单元素“单位名称”
 $form['company_name'] = array(
  '#title' => t('单位名称'),
  '#type' => 'item',
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码，这里保留了。
  //'#value' => $_SESSION['contactus_form']['company_name'],
  //'#value' => '123456',
  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
  //'#description' => '123456',
 );
 
 //表单元素“电子邮件”
 $form['mail'] = array(
  '#title' => t('电子邮件'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
 );
 
 //表单元素“电话号码”
 $form['phone'] = array(
  '#title' => t('电话号码'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
 );
 
  //表单元素“邮件正文”
 $form['contact'] = array(
  '#title' => t('留言内容'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
 );
 
 //表单元素“访问来源”
/* $form['visit'] = array(
  '#title' => t('访问来源'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
 );
 
 //如果访问来源，我们选择了“其它”，此时使用other表单元素的值来替换$form['visit']['#markup']。
 if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";
 } 
 */
 //表单元素“返回”按钮
  $form['back'] = array(
    '#type' => 'submit',
    '#value' => t('返回'),
    '#submit' => array('contactus_confirm_form_back'),
  );
 //表单元素“提交”按钮
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('提交'),
  );
  
  /*
  //表单元素“返回”图片按钮
  $form['image_back'] = array(
    '#type' => 'image_button',
    '#src' => drupal_get_path('module','contactus').'/images/cancel_button.jpg',
  //使用这个按钮提交时，对应的提交处理函数为contactus_confirm_form_back
    '#submit' => array('contactus_confirm_form_back'),
    '#executes_submit_callback' => TRUE,
  //为表单元素添加两个属性，onmouseout、onmouseover，为了在鼠标移到按钮上时，显示不同的图片效果
    '#attributes' =>array(
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/cancel_button.jpg'",
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/cancel_button.jpg'",
    ),
  );
 
  //表单元素“提交”图片按钮
  $form['image_submit'] = array(
    '#type' => 'image_button',
    '#src' => drupal_get_path('module','contactus').'/images/enter_button.jpg',
    '#executes_submit_callback' => TRUE,
  //使用这个按钮提交时，对应的提交处理函数为contactus_confirm_form_submit
    '#submit' => array('contactus_confirm_form_submit'),
    '#attributes' =>array(
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/enter_button.jpg'",
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/enter_button.jpg'",
    ),
  );*/
  
  return $form;
}


/**
 * “联系我们”表单的构建函数
 */
function contactus_form(){
	  //添加我们自己的CSS，用来控制表单的样式
	 //drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
	 
	  //提示信息，默认为markup类型。
	 $form['tips'] = array(
	  '#prefix' =>'<div id="tips">',
	  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),
	  '#suffix' =>'</div>',
	 );
	 
	 //表单元素“联系人”
	 $form['name'] = array(
	   //表单元素的#title属性，对应于实际输出中的label
	  '#title' => t('联系人'),
	  //表单元素的类型，这里为textfield
	  '#type' => 'textfield',
	  //这个表单元素是必填的
	  '#required' => TRUE,
	  //表单元素的默认值，这里使用了三位运算符和isset进行判定
	  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
	  //表单元素的描述，
	  //'#description' => t('例如：张三'),
	 );
	 
	  //表单元素“单位名称”
	 $form['company_name'] = array(
	  '#title' => t('单位名称'),
	  '#type' => 'textfield',
	  '#required' => TRUE,
	  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
	  //'#description' => t('例如：北京无名信息技术公司'),
	 );
	 
	  //表单元素“电子邮件”
	 $form['mail'] = array(
	  '#title' => t('电子邮件'),
	  '#type' => 'textfield',
	  '#required' => TRUE,
	  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
	 // '#description' => t('例如：info@example.com'),
	 );
	 
	 //表单元素“电话号码”
	 $form['phone'] = array(
	  '#title' => t('电话号码'),
	  '#type' => 'textfield',
	  '#required' => TRUE,
	  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
	  //'#description' => t('例如：010-88888888'),
	 );
	 
	  //表单元素“邮件正文”
	 $form['contact'] = array(
	  '#title' => t('留言内容'),
	  //表单元素的类型，这里为textarea
	  '#type' => 'textarea',
	  '#required' => TRUE,
	  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
	 );
	 /*
	 //访问来源的可选项
	 $visit_options = array(
	  'baidu' =>t('百度'),
	  'google' =>t('谷歌'),
	  'sohu' =>t('搜狐'),
	  'other' =>t('其它'),
	 );
	 //表单元素“访问来源”
	 $form['visit'] = array(
	  '#title' => t('访问来源'),
	  //表单元素的类型，这里为radios
	  '#type' => 'radios',
	  //单选按钮的可选项。
	  '#options' => $visit_options,
	  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
	  //为了便于控制radios的外观，我们使用#prefix、#suffix为其添加了一个带有ID的div
	  '#prefix' => '<div id="visit-radios">',
	  '#suffix' => '</div>',
	 );
	 
	 //表单元素“其它”，它依赖于表单元素“访问来源”
	 $form['other'] = array(
	  '#title' => t('其它'),
	  '#type' => 'textfield',
	  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",
	  //这里的意思是，当表单元素“访问来源”的值为“other”时，这个表单元素才显示出来
	   '#states' => array(
	    'visible' => array(
	     ':input[name="visit"]' => array('value' => 'other'),
	   ),
	  ),
	 ); 
	 */
	 //表单元素“确认”提交按钮
	  $form['submit'] = array(
	    '#type' => 'submit',
	    '#value' => t('确认'),
	  );
	  
	 /*
	  //表单元素“确认”提交按钮，这里采用了图片的形式
	  $form['image_submit'] = array(
	   //表单元素的类型，这里为image_button
	    '#type' => 'image_button',
	  
	  //图片按钮特有的#src属性，
	    '#src' => drupal_get_path('module','contactus').'/images/enter_button.jpg',
	    '#value' => 'image_sub',
	  
	  //为表单元素添加两个属性，onmouseout、onmouseover，为了在鼠标移到按钮上时，显示不同的图片效果
	    '#attributes' =>array(
	      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/enter_button.jpg'",
	      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/enter_button.jpg'",
	    ),
	  
	  //为了便于控制image_button的外观，我们使用#prefix、#suffix为其添加了一个带有ID的div
	    '#prefix' => '<div id="image-submit">',
	    '#suffix' => '</div>',
	  );
	 */
	  return $form;
}

/**
 * contactus_form表单的验证函数
 */
function contactus_form_validate($form, &$form_state){
	  //这里使用正则表达式，来验证邮箱的有效性，注意，这里的正则表达式，包围在"/...../"之间。
	 if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){
	  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));
	 }
	  /**
	   * 用户提交的所有数据在 $form_state['values'] 之中，相当于 $_POST
	   * 根据需求，验证昵称是否少于 2 个字符，中英文均算一个字符
	   * 可使用封装好的计算字符串长度函数：drupal_strlen
	   */
	  if (drupal_strlen($form_state['values']['name']) < 2) {
	    /**
	     * 如果少于 2 个字符，调用  form_set_error() 写入错误信息，系统将显示错误信息，同时阻止表单提交
	     * form_set_error() 的格式，第一个参数：字段名称，第二个参数：用户将看到的错误信息
	     */
	    form_set_error('name', '昵称不能少于 2 个字符');
	  } else if (drupal_strlen($form_state['values']['company_name']) > 255) {
	    form_set_error('company_name', '公司名称不能大于 255 个字符');
	  }
  
}

/**
 * contactus_form表单的提交函数
 */
function contactus_form_submit($form, &$form_state){
	  //把表单的值存放在会话中去，由于这里涉及到了两个不同的表单之间传值。
	 $_SESSION['contactus_form'] = $form_state['values'];
	 //表单重定向到确认页面
	 $form_state['redirect'] = 'contactus/confirm';
}
 
/**
 * 返回按钮对应的提交函数
 */
function contactus_confirm_form_back($form, &$form_state){
  //简单的重定向到contactus页面
 $form_state['redirect'] = 'contactus';
}

/**
 * 提交按钮对应的提交函数
 */
function contactus_confirm_form_submit($form, &$form_state){
		/**
	   * 写入数据库
	   */
	   $values = NULL;
	   //从会话中获取用户最初提交的值，并将$_SESSION['contactus_form']置为空。
	  if(empty($_SESSION['contactus_form'])){
		  //drupal_goto('contact');
		  $form_state['redirect'] = 'contactus';
	  }else{
		  $values = $_SESSION['contactus_form'];
		  unset($_SESSION['contactus_form']);
	  }

	  $last_id = db_insert('contactus')
  		->fields(array(
   			 'name' => $values['name'],
   			 'companyname' => $values['company_name'],
   			 'phone' =>  $values['phone'],
   			 'mail' =>  $values['mail'],
   			 'timestamp' => $_SERVER['REQUEST_TIME'],
   			 'body' => $values['contact'],
  			))->execute();
	  if ($last_id!=NULL) {
	  //print $last_id;	    	     
		 //收件人地址，这里为作者的邮箱
		 $to = 'denghc09@gmail.com';
		 //用户填写的邮箱地址
		 $from = $values['mail'];
		 
		 //发送邮件
		 drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);
		 
		 //简单的重定向到致谢页面
		 $form_state['redirect'] = 'contactus/thanks';
	    
	    /**
	     * 这里也可以使用 drupal_goto 来重定向，但这并不是个好方法
	     * 因为可能还有其它提交函数在 后面排队，被这儿一重定向，后面就没机会执行了
	     */
	    
	  } else {
	    
	    // 数据写入失败了
	    drupal_set_message('抱歉，遇到问题，提交失败了', 'error');
	    
	  }	
}

function contactus_edit_form($form, &$form_state, $perid){
  
  $form['bid'] = array('#type' => 'hidden', '#value' => $perid);
 //表单元素“提交”按钮
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('删除该反馈意见'),
  );
  
  return $form;
}

/**
 * contactus_form表单的提交函数
 */
function contactus_edit_form_submit($form, &$form_state){
	 $values = NULL;
	 $_SESSION['contactus_edit_form'] = $form_state['values'];
	 $values = $_SESSION['contactus_edit_form'] ;
	 //表单重定向到确认页面
	 $form_state['redirect'] = 'contactus/deleate/'.$values['bid'];
}

function contactus_deleate_page($perid) {
  // content variable that will be returned for display
  $page_content = '删除后该反馈意见内容将不可恢复！';
  
  drupal_set_title('删除反馈意见');
	 
	 $render_array = array(
	   '#markup' => $page_content,
	 );
	 
	 //该页面的正文为一个表单，注意对于表单，这里需要使用drupal_render呈现一下。
	 $form = drupal_get_form('contactus_deleate_form');
	 $render_array['#markup'] .= drupal_render($form);
	 
	 //Drupal7的页面回调，返回的应该是一个数组
  return $render_array;

}


function contactus_deleate_form($form, &$form_state){
 //表单元素“返回”按钮
  $form['back'] = array(
    '#type' => 'submit',
    '#value' => t('取消'),
    '#submit' => array('contactus_deleate_form_back'),
  );
 //表单元素“提交”按钮
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('删除'),
  );
  
  return $form;
}

function contactus_deleate_form_back($form, &$form_state){
	if(empty($_SESSION['contactus_edit_form'])){
		  //drupal_goto('contact');
		  $form_state['redirect'] = 'contactus/list';
	  }else{
		  $values = $_SESSION['contactus_edit_form'];
		  unset($_SESSION['contactus_edit_form']);
		  $form_state['redirect'] = 'contactus/list/'.$values['bid'];
	  }
}

function contactus_deleate_form_submit($form, &$form_state){
  //简单的重定向到contactus页面
 if(empty($_SESSION['contactus_edit_form'])){
		  //drupal_goto('contact');
		  $form_state['redirect'] = 'contactus/list';
	  }else{
		  $values = $_SESSION['contactus_edit_form'];
		  unset($_SESSION['contactus_edit_form']);
		  db_delete('contactus')
			->condition('id' ,$values['bid'])
			->execute();
		  $form_state['redirect'] = 'contactus/list';;
	  }

}
